const { v4: uuidv4 } = require('uuid');
const fs = require('fs');
const path = require('path');

/**
 * 生成 UUID
 * @returns {string} 生成的 UUID
 */
const generateUUID = () => {
  return uuidv4();
};

/**
 * 清理过期日志文件
 * @param {string} logDir - 日志目录路径
 * @param {number} maxFiles - 最大保留文件数
 */
const cleanOldLogs = (logDir, maxFiles) => {
  if (!fs.existsSync(logDir)) return;
  
  const files = fs.readdirSync(logDir)
    .map(file => ({
      name: file,
      time: fs.statSync(path.join(logDir, file)).birthtime.getTime()
    }))
    .sort((a, b) => a.time - b.time); // 按创建时间升序排序
  
  // 删除最早的文件，直到文件数量不超过 maxFiles
  while (files.length > maxFiles) {
    const oldestFile = files.shift();
    fs.unlinkSync(path.join(logDir, oldestFile.name));
  }
};

/**
 * 统一日志写入工具（含自动清理功能）
 * @param {string} type - 日志类型（'run' | 'error' | 'db'）
 * @param {string} message - 日志内容
 */
const writeLog = (type, message) => {
  const now = new Date();
  const timezoneOffset = 8 * 60 * 60 * 1000; // 东八区偏移量（毫秒）
  const beijingTime = new Date(now.getTime() + timezoneOffset);
  const formattedTime = beijingTime.toISOString().replace('T', ' ').replace('Z', '').slice(0, -1); // 格式化为 2025-10-28 14:24:23.999
  
  const logDir = path.join(__dirname, `../log/${type}log`);
  try {
    if (!fs.existsSync(logDir)) {
      fs.mkdirSync(logDir, { recursive: true });
      console.log(`Created log directory: ${logDir}`); // 调试用，可移除
    }
  } catch (err) {
    console.error(`Failed to create log directory ${logDir}:`, err);
    throw err; // 抛出错误以便上层处理
  }
  
  // 根据日志类型设置最大保留文件数
  const maxFiles = type === 'error' ? 30 : 7;
  cleanOldLogs(logDir, maxFiles);
  
  const today = beijingTime.toISOString().split('T')[0];
  const logFile = path.join(logDir, `${today}.txt`);
  const logMessage = `[${formattedTime}] ${message}\n`;
  
  fs.appendFileSync(logFile, logMessage);
};

module.exports = {
  generateUUID,
  writeLog,
};